package com.xiangge.demo;

import java.util.Scanner;

/*
     循环结构：
         分类：
              for循环
              while循环
              do...while循环

         --  for循环 ：
               引入： 打印1-5的整数数字
               明确： 将重复执行的代码放到循环中执行
               格式：
                   for(初始化语句; 条件判断语句 ; 条件控制语句){
                        循环体语句;
                   }
               执行流程：
                   第1轮 ： 初始化语句 --> 条件判断语句 -true-> 循环体语句 ---> 条件控制语句
                   第2轮 ： 条件判断语句 -true-> 循环体语句 ---> 条件控制语句
                   ...
                   第n轮 ： 条件判断语句 -true-> 循环体语句 ---> 条件控制语句
                   一旦有一轮的条件判断不成立时,就跳出循环，执行循环之后的代码
               【随堂练习】
                    1、输出0(包含)到100(包含)之间的数, 分别以递增和递减的方式实现；
                    2、输出1到100之间的奇数和偶数；
                    3、输入一个正整数n，计算1+2+3+…+n的和；
                    4、输入一个正整数n，计算1-2+3-4+5-6+…-(n-1)+n的和；
                    5、输出1到1000之间既能被5整除又能被3整除的数，并且每行输出5个。
                    6、求100到999之间的水仙花数。水仙花数的每个位上的数字的3次幂之和等于它本身（例如：1^3 + 5^3+ 3^3 = 153）。
                    7、编程找出四位整数abcd中满足下述关系的数，(ab+cd)*(ab+cd)=abcd（例如：(20 + 25) * (20 + 25)= 2025）。
 */
public class ForDemo1 {
    public static void main5(String[] args) {
        /*
            7、编程找出四位整数abcd中满足下述关系的数，(ab+cd)*(ab+cd)=abcd（例如：(20 + 25) * (20 + 25)= 2025）。

             补充说明： Math.pow(m,n) ---> m^n
         */
        // 定义统计变量
        int count = 0;
        // 1. 使用for循环定义变量: abcd 代表 [1000,9999] 之间所有的数
        for (int abcd = 1000; abcd <= 9999; abcd++) {
            // 2. 分别求出 ab 和 cd           2025  --->
            int ab = abcd / 100;
            int cd = abcd % 100;
            // 3. 使用if单选结构判断： 判断的条件 ： (ab + cd ) *  (ab + cd )  == abcd
            if ( Math.pow((ab+cd),2) == abcd ) {
                // 4. 输出满足条件的数字
                System.out.println(abcd);
                // 每次输出一个符合条件的数就统计一次
                count++;
            }
        }
        // 在整个循环结束之后,输出统计变量的值
        System.out.println("满足条件的数有：" + count + "个。");
    }
    public static void main4(String[] args) {
        /*
            5、输出1到1000之间既能被5整除又能被3整除的数，并且每行输出5个。
         */
        // 定义统计变量
        int count = 0;
        // 1. 使用for循环定义变量i代表[1,1000]之间所有的整数
        for (int i = 1; i <= 1000; i++) {
            // 2. 既能被5整除又能被3整除 :    i % 5 == 0  &&    i % 3 == 0
            if (i % 5 == 0 && i % 3 == 0) {
                // 输出满足要求的数字
                System.out.print(i + "\t");
                // 每次输出一个符合条件的数之后,要统计一次
                count++;
                // 判断当count为5的倍数： 5 , 10 , 15 , 20 .....  时  换行
                if(count % 5 == 0){
                    System.out.println();
                }
            }
        }

        System.out.println("\n满足条件的数有：" + count +"个。");
    }
    public static void main3(String[] args) {
        /*
              4、输入一个正整数n，计算1-2+3-4+5-6+…-(n-1)+n的和；
         */
        // 1. 键盘录入一个正整数：n
        System.out.println("请录入一个正整数：");
        int n = new Scanner(System.in).nextInt();
        // 对n进行数据校验
        if(n < 1){
            System.err.println("您录入的正整数有误！");
            return;
        }

        // 定义求和变量sum
        int sum = 0;

        // 程序走到此处说明： n >= 1 的整数
        // 2. 使用for循环定义变量i 代表 [1,n]之间所有的正整数
        for (int i = 1; i <= n; i++) {
            // 3. 判断 i 的奇偶性
            if (i % 2 == 0) {  // 处理 i 是偶数的情况
                 sum = sum - i;
            } else { // 处理 i 是奇数的情况
                sum = sum + i;
            }
        }

        // 3. 循环结束之后打印sum
        System.out.println("1-2+3-4+5-6+…-(n-1)+n的和 : " + sum);


    }
    public static void main2(String[] args) {
        /*
             1、输出0(包含)到100(包含)之间的数, 分别以递增和递减的方式实现；
                分析：
                    1. 使用for循环定义一个变量i 从 0 开始 , 到100结束
                    2. 使用for循环定义一个变量i 从 100 开始 , 到0结束
         */
        for (int i = 0; i < 101; i++) { // 循环次数.fori
            System.out.println(i);
        }
        System.out.println("-------------------------------------------");
        for (int i = 100; i >= 0; i--) {// 循环次数.forr
            System.out.println(i);
        }
    }
    public static void main1(String[] args) {
//        System.out.println(1);   起点
//        System.out.println(2);
//        System.out.println(3);
//        System.out.println(4);
//        System.out.println(5);   终点
        // 使用for循环
        for (int i = 1; i <= 5; i++) {
            System.out.println(i);
        }

    }
}
